package com.jingxuan.common.constant;

import java.util.*;

/**
 * 商品分类常量类
 * 定义大类与小类的映射关系
 */
public final class CategoryConstants {

    private CategoryConstants() {
    }

    /**
     * 大类 -> 小类列表 映射
     */
    public static final Map<String, List<String>> CATEGORY_MAPPING;

    /**
     * 小类 -> 大类 反向映射（用于快速查找）
     */
    public static final Map<String, String> SUB_TO_BIG_CATEGORY;

    /**
     * 所有大类列表
     */
    public static final List<String> BIG_CATEGORIES;

    static {
        Map<String, List<String>> mapping = new LinkedHashMap<>();

        mapping.put("手机数码", Arrays.asList(
            "CPU", "HiFi耳机", "NAS", "U盘", "一体机", "交换机", "传感器", "充电宝",
            "内存", "台式机", "墨盒", "壳膜", "复印纸", "复合机", "录音笔", "手机",
            "手环", "手表", "打印机", "扫地机器人", "扫描仪", "投影", "数据线", "显卡",
            "显示器", "智能眼镜", "智能车机", "机油", "硬盘", "硬盘盒", "碎纸机",
            "磁吸充", "移动硬盘", "笔记本", "笔记本电脑", "系统", "考勤门禁", "耳机",
            "蓝牙耳机", "读卡器", "路由器", "迷你主机", "键盘", "镜头", "电脑", "电子书",
            "鼠标", "硒鼓", "运动手表", "办公", "平板", "计算机", "相机", "相纸",
            "无人机", "科技", "贴膜", "电池", "收音机"
        ));

        mapping.put("家用电器", Arrays.asList(
            "RO净水", "中央空调", "五金", "冰柜", "冰箱", "加湿器", "卧室", "厕所",
            "台灯", "吸尘器", "吸顶灯", "吹风机", "咖啡机", "四件套", "垃圾袋", "地板",
            "地毯", "客厅", "干衣机", "应急工具", "扫拖工具", "挂画", "收纳", "收纳箱",
            "摆件", "木门", "枕芯", "毛毯", "沙发套", "油烟机", "洗碗机", "洗衣机",
            "浴室柜", "涂料", "烟灶", "炉具", "燃气灶", "燃气热水器", "电动牙刷",
            "电饭煲", "瓷砖", "盆栽", "窗帘", "筒射灯", "置物架", "装饰画", "门锁",
            "雾化器", "音箱", "餐椅", "餐厅", "香薰", "香薰蜡烛", "马桶", "龙头花洒",
            "软水机", "空气净化器", "空气炸锅", "空调", "破壁机", "足浴盆", "驱虫",
            "灭火器", "智能灯", "园艺工具", "多肉", "花种", "蒸烤", "集成灶", "电视",
            "百叶", "衣柜整理", "被芯", "插座", "电"
        ));

        mapping.put("服饰鞋包", Arrays.asList(
            "丝袜", "亲子装", "休闲裤", "休闲鞋", "内裤", "凉拖", "凉鞋儿童", "半身裙",
            "单肩", "单鞋", "围巾", "女装", "婴童装", "学生书包", "家居服", "帽子",
            "手套", "手提", "文胸", "斜挎", "棉拖", "棉服", "男装", "皮带", "皮鞋",
            "短靴", "睡衣", "篮球鞋", "背包", "背带", "背带裙", "船袜", "西裤",
            "训练短裤", "训练鞋", "跑步服", "跑步鞋", "跑鞋", "运动T", "运动鞋",
            "连衣裙", "通勤双肩", "造型", "靴子", "鞋垫", "鞋带", "骑行服", "高跟鞋",
            "登机箱", "瑜伽服", "马甲", "牛仔裤", "球衣", "球鞋", "工装"
        ));

        mapping.put("个护美妆", Arrays.asList(
            "EDP", "EDT", "乳液", "剃须刀", "化妆刷", "卷发棒", "发膜", "口红", "护发",
            "护垫", "护理套装", "护理液", "护腕", "护臀膏", "洁面", "洗发", "洗发婴儿",
            "洗_衣液", "清洁", "清洁剂", "漱口水", "牙刷", "牙膏", "眼影", "粉底",
            "粉扑", "精华", "美容仪", "腮红", "身体乳", "须后", "香水", "面膜",
            "面霜", "防晒", "隐形眼镜", "湿巾", "卫生巾", "沐浴露", "理发器", "私护",
            "皮肤", "洗车工具"
        ));

        mapping.put("母婴亲子", Arrays.asList(
            "儿童", "启蒙", "奶瓶", "婴儿床", "婴儿沐浴露", "婴幼儿奶粉", "孕产营养",
            "学步鞋", "安全座椅", "少儿", "早教益智", "暖奶器", "积木", "拼插", "绘本",
            "吸奶器", "拉拉裤", "纸尿裤", "推车", "玩具", "遥控", "电动儿童"
        ));

        mapping.put("食品生鲜", Arrays.asList(
            "乳制品", "冻干", "即食", "咖啡", "啤酒", "地方特产", "坚果", "大米", "奶茶",
            "当季鲜果", "方便面", "洋酒", "溶豆", "牛排", "白酒", "米粉", "糕点", "糖果",
            "薯片", "虾", "进口食品", "速冻食品", "葡萄酒", "零食罐头", "面条", "面粉",
            "食用油", "鲜肉", "鸡蛋", "黄油", "茶", "燕窝", "肉干", "鱼", "酱料", "香料",
            "礼盒水果", "自热", "水", "功能饮料", "贝"
        ));

        mapping.put("运动户外", Arrays.asList(
            "冲浪", "哑铃", "鱼竿", "鱼线", "渔轮", "帐篷", "护具", "极限", "瑜伽", "码表",
            "臂包", "公路", "轮滑滑板", "运动相机", "阻力带", "游泳", "潜水", "训练",
            "天幕", "头盔", "三脚架"
        ));

        mapping.put("医药保健", Arrays.asList(
            "DHA", "人参", "体温计", "冬虫夏草", "情趣", "感冒", "理疗仪", "血糖仪",
            "血压计", "计生", "肠胃", "排卵", "早孕试纸", "维生素", "矿物质", "益生菌",
            "钙铁锌", "阿胶", "营养膏"
        ));

        mapping.put("图书文娱", Arrays.asList(
            "CD", "DVD", "书房", "传记", "历史", "收藏", "教材", "教辅", "文创周边",
            "文学", "生活艺术", "社科", "经管", "考试", "小说", "黑胶", "乐器", "手帐",
            "有声读物", "电影"
        ));

        mapping.put("汽车用品", Arrays.asList(
            "包围", "导航", "尾翼", "滤清器", "添加剂", "牵引", "胎压监测", "脚垫",
            "安防摄像", "车载支架", "轮胎轮毂", "镀膜打蜡", "拖车绳", "座套", "流量卡",
            "工业", "安全"
        ));

        mapping.put("宠物生活", Arrays.asList(
            "宠物玩具", "犬主粮", "猫主粮", "猫砂", "鱼粮", "鱼缸"
        ));

        CATEGORY_MAPPING = Collections.unmodifiableMap(mapping);
        BIG_CATEGORIES = Collections.unmodifiableList(new ArrayList<>(mapping.keySet()));

        // 构建反向映射
        Map<String, String> reverseMapping = new HashMap<>();
        for (Map.Entry<String, List<String>> entry : mapping.entrySet()) {
            String bigCategory = entry.getKey();
            for (String subCategory : entry.getValue()) {
                reverseMapping.put(subCategory, bigCategory);
            }
        }
        SUB_TO_BIG_CATEGORY = Collections.unmodifiableMap(reverseMapping);
    }

    /**
     * 根据小类名称获取大类
     * @param subCategory 小类名称
     * @return 大类名称，未找到返回"其他"
     */
    public static String getBigCategory(String subCategory) {
        if (subCategory == null || subCategory.isEmpty()) {
            return "其他";
        }
        return SUB_TO_BIG_CATEGORY.getOrDefault(subCategory, "其他");
    }

    /**
     * 获取大类下的所有小类
     * @param bigCategory 大类名称
     * @return 小类列表，未找到返回空列表
     */
    public static List<String> getSubCategories(String bigCategory) {
        if (bigCategory == null || bigCategory.isEmpty()) {
            return Collections.emptyList();
        }
        return CATEGORY_MAPPING.getOrDefault(bigCategory, Collections.emptyList());
    }

    /**
     * 判断是否为有效的大类
     */
    public static boolean isValidBigCategory(String category) {
        return category != null && CATEGORY_MAPPING.containsKey(category);
    }

    /**
     * 判断是否为有效的小类
     */
    public static boolean isValidSubCategory(String category) {
        return category != null && SUB_TO_BIG_CATEGORY.containsKey(category);
    }
}

